package lc20240626;

/**
 * @author 不知名帅哥
 * @version 1.0
 * @description 给x开平方根。  x的n次幂。
 * @date 2024/6/26 23:55
 */
public class SquareRoot {
    public static int mySqrt(int x) {
        if (x == 0) {
            return 0;
        }
        if (x < 4 && x > 0) {
            return 1;
        }
//        for (long i = 0; i < x; i++) {
//            if (i*i>x){
//                return (int) (i-1);
//            }
//        }
        int left = 0;
        int right = x;
        int res = 0;
        //注意等于的条件。
        while (left <= right) {
            int mid = left + (right - left) / 2;
            //除数不能为0
            if (mid == x / mid) {
                return mid;
            } else if (mid < x / mid) {
                left = mid + 1;
                res = mid;
            } else {
                right = mid - 1;
            }
        }
        return res;
    }

    //计算x的n次幂
    public static double myPow(double x, int n) {
        if (n == 0) {
            return 1.0;
        }

        // 处理负指数的情况
        long N = n;
        if (N < 0) {
            x = 1 / x;
            N = -N;
        }

        double res = 1;
        double cur = x;
        //类似二分查找的思想，对半乘。24816。注意奇数和偶数。
        while (N > 0) {
            if (N % 2 == 1) {
                res = res * cur;
            }
            cur *= cur;
            N /= 2;
        }
        return res;
    }

    public static void main(String[] args) {
//        System.out.println(mySqrt(2147395600));
        double num = myPow(2, -2);
        System.out.println(num);
    }
}
